package accesoDatos;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;

import entidades.Plan;
import dataSet.PlanEspecialidad;

public class adPlanes extends adDatos{
    public void agregarPlan(Plan planActual)
    {
        Connection oCnn = crearConexion();

        StringBuilder sb = new StringBuilder();
        sb.append(" INSERT INTO planes( ");
        sb.append("     desc_plan, ");
        sb.append("     id_especialidad ");
        sb.append(" ) ");
        sb.append(" VALUES ( '");
        sb.append(      planActual.getDescripcion()+ "',");
        sb.append(	    planActual.getIdEspecialidad());
        sb.append(" ); ");
        
		try {
			Statement cmdInsertarPlan = oCnn.createStatement();
			cmdInsertarPlan.executeUpdate(sb.toString());
			oCnn.close();
		} catch (SQLException e) {
			e.printStackTrace();
			System.out.println("ERROR: No se pudo agregar el Plan.");
		}
    }
	
    public void borrarPlan(int id_plan)
    {
        Connection oCnn = crearConexion();
        
        StringBuilder sb = new StringBuilder();

        sb.append(" DELETE FROM planes ");
        sb.append(" WHERE id_plan = "+id_plan+"; ");

        try{
        	Statement cmdBorrarPlan = oCnn.createStatement();
        	cmdBorrarPlan.executeUpdate(sb.toString());
        	oCnn.close();
        } catch (SQLException e) {
			e.printStackTrace();
			System.out.println("ERROR: No se pudo borrar el Plan.");
		}
    }
	
    public void modificarPlan(Plan planActual)
    {
        Connection oCnn = crearConexion();

        StringBuilder sb = new StringBuilder();
        sb.append(" UPDATE planes ");
        sb.append(" SET  ");
        sb.append("     desc_plan = '"+planActual.getDescripcion()+"' ");
        sb.append("     ,id_especialidad = "+planActual.getIdEspecialidad()+" ");
        sb.append(" WHERE id_plan = "+planActual.getId()+" ");

        try{
        	Statement cmdModificarPlan = oCnn.createStatement();
        	cmdModificarPlan.executeUpdate(sb.toString());
        	oCnn.close();
        } catch (SQLException e) {
			e.printStackTrace();
			System.out.println("ERROR: No se pudo modificar el Plan.");
		}
    }
	
    public Plan getPlan(int id_plan)
    {
        Plan planActual = new Plan();
        Connection oCnn = crearConexion();

        StringBuilder sb = new StringBuilder();
        sb.append(" SELECT ");
        sb.append(" * ");
        sb.append(" FROM planes ");
        sb.append(" WHERE id_plan = "+id_plan+" ");

        try{
        	Statement cmdGetPlan = oCnn.createStatement();
        	ResultSet rsPlanes = cmdGetPlan.executeQuery(sb.toString());
        	if (rsPlanes.next() == true){
        		rsPlanes.beforeFirst();
    	        
    	        while (rsPlanes.next()){
    	        	planActual.setId(rsPlanes.getInt("id_plan"));
    	        	planActual.setDescripcion(rsPlanes.getString("desc_plan"));
    	        	planActual.setIdEspeciliadad(rsPlanes.getInt("id_especialidad"));
    	        }
    	    }
        	oCnn.close();
        } catch (SQLException e) {
			e.printStackTrace();
			System.out.println("ERROR: No se pudo obtener el Plan.");
		}
        return planActual;
    }
	
    public ArrayList<PlanEspecialidad> recuperarTodos()
    {
        Connection oCnn = crearConexion();
        ArrayList<PlanEspecialidad> listaPlanEspecialidad = new ArrayList<PlanEspecialidad>();
        PlanEspecialidad planEspActual;
        
        StringBuilder sb = new StringBuilder();
        sb.append(" SELECT p.id_plan AS Id, p.desc_plan AS Descripcion, p.id_especialidad AS IDEspecialidad, e.desc_especialidad ");
        sb.append(" FROM planes p ");
        sb.append(" INNER JOIN especialidades e ON p.id_especialidad = e.id_especialidad ");
        sb.append(" ORDER BY Descripcion ");

        try{
        	Statement cmdRecuperarPlanes = oCnn.createStatement();
        	ResultSet rsPlanes = cmdRecuperarPlanes.executeQuery(sb.toString());
        	if (rsPlanes.next()==true){
        		rsPlanes.beforeFirst();
    	        
    	        while (rsPlanes.next()){
    	        	planEspActual = new PlanEspecialidad();
    	        	planEspActual.setIdPlan(rsPlanes.getInt("Id"));
    	        	planEspActual.setDescripcionPlan(rsPlanes.getString("Descripcion"));
    	        	planEspActual.setIdEspeciliadad(rsPlanes.getInt("IDEspecialidad"));
    	        	planEspActual.setDescripcionEspecialidad(rsPlanes.getString("desc_especialidad"));

    	            listaPlanEspecialidad.add(planEspActual);
    	        }
    	    }
        	oCnn.close();
        } catch (SQLException e) {
            e.printStackTrace();
            System.out.println("ERROR: No se pudo obtener los Planes y Especialidades.");
	}
        return listaPlanEspecialidad;
    }
	
    public boolean estaAsociado(String idPlan)
    {
	Connection oCnn = crearConexion();
        
	StringBuilder sb = new StringBuilder();

        sb.append(" (SELECT id_materia ");
        sb.append(" FROM materias ");
        sb.append(" WHERE id_plan = "+idPlan+" ");
        sb.append(" )UNION( ");
        sb.append(" SELECT id_comision ");
        sb.append(" FROM comisiones ");
        sb.append(" WHERE id_plan = "+idPlan+" ");
        sb.append(" )UNION( ");
        sb.append(" SELECT id_persona ");
        sb.append(" FROM personas ");
        sb.append(" WHERE id_plan = "+idPlan+") ");
        
        try {
        	Statement cmdAsociado = oCnn.createStatement();
        	ResultSet rsPlanes = cmdAsociado.executeQuery(sb.toString());
        	if(rsPlanes.next()){
        		oCnn.close();
        		return true;
        	}	
		} catch (Exception e) {
			e.printStackTrace();
			System.out.println("ERROR: No se pudo determinar si el Plan esta asociado a Materias, Comisiones o a una Persona.");
		}
        return false;
    }

    public boolean existePlan(String DescPlan, String idEspecialidad)
    {
    	Connection oCnn = crearConexion();
        
        String sql = "SELECT * FROM planes WHERE desc_plan = '"+DescPlan+"' AND id_especialidad = '"+idEspecialidad+"' ";
        
        try {
        	Statement cmdExistePlan = oCnn.createStatement();
			ResultSet rsPlanes = cmdExistePlan.executeQuery(sql);
			oCnn.close();
			return rsPlanes.next();
		} catch (Exception e) {
			e.printStackTrace();
			System.out.println("ERROR: No se pudo determinar si existe el Plan.");
		}
        return false;
    }
	
	//Sin reportes
	/*public DataSet recuperarPlanesParaReporte()
    {

        SqlConnection oCnn = CrearConexion();
        oCnn.Open();

        DataSet dtsDatos = new DataSet();

        StringBuilder sb = new StringBuilder();

        //Recupero s�lo los cursos de una materia en particular y que tengan cupo
        sb.Append(" SELECT p.desc_plan, e.desc_especialidad ");
        sb.Append(" FROM planes p ");
        sb.Append(" INNER JOIN especialidades e ON p.id_especialidad = e.id_especialidad ");
        sb.Append(" ORDER BY e.desc_especialidad, p.desc_plan ");

        SqlDataAdapter da = new SqlDataAdapter(sb.ToString(), oCnn);

        da.Fill(dtsDatos, "Planes");

        oCnn.Close();

        return dtsDatos;
    }*/

}
